package com.shujia.scala

object Demo6Class {

  def main(args: Array[String]): Unit = {

    val stu = new Student("001", "张三", 23)

    println(stu._age)
    println(stu._name)

    println(stu)


    val stu2 = new Student("002", "李四", 24, "男")

    println(stu2)


    val i = TextObject.fun("100")
    println(i)

    /**
      * 类中的普通方法需要通过类的对象才能调用
      * object中的方法可以直接调用
      *
      */

  }

}

/**
  * 在类中可以定义属性，方法，构造函数
  *
  */

class Student(id: String, name: String, age: Int) {
  println("默认构造函数")

  //定义属性并赋值
  val _id: String = id
  val _name: String = name
  val _age: Int = age


  //下划线是一个占位符，起到占用位置的作用
  var _gender: String = _

  /**
    * 重载构造函数
    * 在重载构造函数的第一行需要显示调用默认构造函数
    *
    */
  def this(id: String, name: String, age: Int, gender: String) {
    this(id, name, age)
    println("重载构造函数")

    this._gender = gender

  }


  /**
    * override：重写父类的方法
    *
    */

  override def toString: String = {
    //默认函数最后一行作为返回值，所以return可以省略

    s"Student(${_id}, ${_name}, ${_age},${_gender})"
  }
}


/**
  * 定义一个单例模式的对象
  * 对象中的方法可以直接调用
  *
  */

object TextObject {
  def fun(s: String): Int = {
    s.toInt
  }
}
